home *** CD-ROM | disk | FTP | other *** search
- /*--------------------------------------------------------------*/
- /* */
- /* */
- /* */
- /* CD2PCMt.x: 一応汎用CD-ROM CD-DA DATA 読み込みProg. */
- /* */
- /* Copyright 1995-96 TNB製作所 */
- /* */
- /* */
- /* */
- /* Orig. */
- /* cd2pcm.x: SONY CDU-561・CDU-55S & TOSHIBA XM-3401TA・XM-4101TA*/
- /* オーディオデータ取り込みプログラム Ver 0.8a */
- /* Copyright(c) 1993-1994 WATA (渡邉 正治) */
- /* Made in Osaka. */
- /* */
- /* */
- /* PCM SUB. PCMLIB.A ver 1.03a written by GORRY */
- /* adpcmlib.a ver 0.01 (C) Otankonas */
- /* */
- /* */
- /*--------------------------------------------------------------*/
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <TNB.H>
- #include "cd2pcm.h"
- #include "extern.h"
-
- static char outfile_pcm[] = "TEST.P16";
- static char outfile_adpcm[] = "TEST.PCM";
- static char outfile_wave[] = "TEST.WAV";
- static char outfile_s44[] = "TEST.S44";
- static char outfile_a44[] = "TEST.A44";
- static char outfile_m44[] = "TEST.M44";
- static char outfile_s22[] = "TEST.S22";
- static char outfile_a22[] = "TEST.A22";
- static char outfile_a88[] = "TEST.A88";
-
- void main( int argc, char *argv[] )
- {
- int i,j,mode,min,max,dmy,adr;
- int start,end,music_no;
- int tstart,tend,shigh,smid,slow,ehigh,emid,elow;
- char *arg;
- char *ptr; /* 環境変数 "CD-ROM" のポインター */
- char buf[256];
- unsigned char buf2[256];
- int of = 0;
-
- printf(
- "X68k CDtoPCM [CD2PCMt.x] Version 0.96A Copyright 1995-1997 TNB製作所\n"
- " Orig. cd2pcm Ver 0.8a Copyright (c) 1993-1994 by WATA\n"
- );
-
- /* 変数初期化 */
- mode = cd_演奏情報;
- SCSI_ID = -1;
- CDC_ID = -1;
- adr_offset = 0; /* デフォルトセット */
- waru = 16; /* デフォルトセット */
- convert_mode = CONVERT_M; /* デフォルトセット */
- outfile = NULL;
- pcm_mode = CONVERT_PCM15;
- adpcm_flg = 1; /* 1;ADPCM 0;PCM 2;WAVE */
- cd_speed = -1; /* 現在の速度で取り込む */
- check_fg = 0; /* チェックしない。*/
- disp_fg = 0; /* 表示する。 */
- buf_size = -1; /* MEM取れるだけ */
- write_size = 0; /* DISKに書き込んだサイズ*/
- CDROM_DRIVE = -1;
- retry_fg = 0; /* -retry[n] 取り込みエラーが出た場合[n]回挑戦*/
- errjmp_fg = 0; /* 致命的でないエラーは無視します。*/
- errod_fg = 0; /* -ejjod */
- pcm_rate = -1; /* -rate 0;15625 変換レート*/
- secone_fg = 0;
- inqu_sw = -1;
- evn = 0; /*環境変数チェック*/
- retry_mx = 0; /* エラーの最大リトライ数 */
- errjmp_mx = 0; /* 致命的でないエラーの数 */
- fcmppr = 0; /* 比較時の一致とみなす一致パーセント数 */
- dma_fg = 1; /* DMAC使用フラグ*/
- sct_fg = 0; /* SCSITAI 使用フラグ*/
- stm_fg = 0; /* SCSITAI & マニュアル転送フラグ*/
- mach2_fg = 0; /* Mach2 フラグ*/
- test_fg = 0; /* test フラグ */
- merc_fg = 0; /* まーきゅりフラグ*/
- cdspeed = 0; /* MMC 対応 スピード*/
- MT_bak[0] = 0xFF;
-
-
- /* オプション解析処理 */
- for(i=1;;i++){
- if ( evn && i>=argc )
- break;
- if ( (arg=SwitchDisp(i,argc,argv))==0 )
- break;
- if ( arg[0] == '-' || arg[0] == '/' ){
- switch(arg[1]|0x20){
- case 's':
- if ( stricmp( "ony" ,&arg[2] ) == 0 ){
- CDROM_DRIVE=CD_CDU561;
- inqu_sw = 1;
- } else if ( stricmp( "econe" ,&arg[2] ) == 0 ){
- secone_fg=-1;
- } else if ( arg[2] == 0 ){
- mode = cd_演奏中断;
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- case 'd':
- if ( stricmp( "ma" ,&arg[2] ) == 0 ){
- dma_fg = 1; /* DMAC使用フラグ*/
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- case 't':
- if ( stricmp( "est" ,&arg[2] ) == 0 ){
- test_fg=1; /* 転送テストフラグ*/
- } else if ( stricmp( "oshiba" ,&arg[2] ) == 0 ){
- CDROM_DRIVE=TOSHIBATYPE;
- inqu_sw = 1;
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- case 'c':
- if ( strncmp( "dspeed" ,&arg[2],6 ) == 0 ){
- if ( sscanf( &arg[8],"%d", &cdspeed )!=1 ){
- printf("cdspeed 値がありません。\n");
- exit(1);
- }
- if ( cdspeed<1 || cdspeed>30 ){
- printf("cdspeed 値が異常です。\n");
- exit(1);
- }
- } else if ( strncmp( "hkp" ,&arg[2],3 ) == 0 ){
- if ( sscanf( &arg[5],"%d", &fcmppr )!=1 ){
- printf("chkp 値がありません。\n");
- exit(1);
- }
- if ( fcmppr<0 || fcmppr>100 ){
- printf("chkp 値が異常です。\n");
- exit(1);
- }
- } else if ( stricmp( "heck" ,&arg[2] ) == 0 ){
- check_fg = 1;
- } else if ( stricmp( "hecks" ,&arg[2] ) == 0 ){
- check_fg = 2;
- } else if ( arg[2] == 0 ){
- mode = cd_演奏再開;
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- case 'l':
- if ( (arg[2]|0x20) == 'e' ){
- convert_mode = CONVERT_L;
- adr_offset = 0;
- } else {
- mode = cd_演奏リスト;
- }
- break;
- case 'i':
- if ( (arg[2]|0x20)=='d' ){
- SCSI_ID = arg[3] - '0';
- if ( SCSI_ID<0 || SCSI_ID>9 ) {
- j=(arg[3]|0x20) - 'a';
- if ( j>=0 && j<=5 ){
- SCSI_ID = 10 + j;
- } else {
- printf(" SCSI-ID が異常です。\n");
- exit(1);
- }
- } else {
- j=arg[4] - '0';
- if ( j>=0 && j<=15 )
- SCSI_ID = SCSI_ID*10 + j;
- if ( SCSI_ID<0 || SCSI_ID>15 ){
- printf(" SCSI-ID が異常です。\n");
- exit(1);
- }
- }
- } else {
- SCSI_ID = arg[2] - '0';
- if ( SCSI_ID<0 || SCSI_ID>9 ) {
- j=(arg[2]|0x20) - 'a';
- if ( j>=0 && j<=5 ){
- SCSI_ID = 10 + j;
- } else {
- printf(" SCSI-ID が異常です。\n");
- exit(1);
- }
- } else {
- j=arg[3] - '0';
- if ( j>=0 && j<=15 )
- SCSI_ID = SCSI_ID*10 + j;
- if ( SCSI_ID<0 || SCSI_ID>15 ){
- printf(" SCSI-ID が異常です。\n");
- exit(1);
- }
- }
- }
- break;
- case 'h':
- if ( strncmp( "rate" ,&arg[2],4 ) == 0 ){
- pcm_rate = 22050;
- break;
- }
- cd2pcm_help();
- exit(0);
- break;
- case '?':
- cd2pcm_help();
- exit(0);
- break;
- case 'g':
- if ( (arg[2]|0x20) == 't' ){
- mode = cd_取り込み2;
- switch( sscanf( &arg[3],"%d/%d%1s%d%1s%d%1s%d%1s%d%1s%d",
- &music_no,
- &shigh,&buf[0],&smid,&buf[1],&slow,&buf[2],
- &ehigh,&buf[3],&emid,&buf[4],&elow ) )
- {
- case 12:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tstart = tstart - ( 2 * 75 );
- tend = ( ehigh * 60 * 75 ) + ( emid * 75 ) + elow ;
- tend = tend - ( 2 * 75 );
- if ( buf[0]!=':' || buf[1]!=':' || buf[2]!='-' ||
- buf[3]!=':' || buf[4]!=':' || slow>=75 ||
- elow>=75 || smid>=60 || emid>=60 ||
- tstart<-150 || tend<=-150 || tstart>=tend ||
- music_no<=0 )
- {
- printf("読み込み時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- case 7:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tstart = tstart - ( 2 * 75 );
- tend = -1;
- if ( buf[0] != ':' || buf[1] != ':' || buf[2] != '-' ||
- slow >= 75 || smid >=60 || tstart < -150 ||
- music_no <= 0 )
- {
- printf("読み込み時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- default:
- music_no = 0;
- switch( sscanf( &arg[3],"%d%1s%d%1s%d%1s%d%1s%d%1s%d",
- &shigh,&buf[0],&smid,&buf[1],&slow,&buf[2],
- &ehigh,&buf[3],&emid,&buf[4],&elow ) )
- {
- case 11:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tstart = tstart - ( 2 * 75 );
- tend = ( ehigh * 60 * 75 ) + ( emid * 75 ) + elow ;
- tend = tend - ( 2 * 75 );
- if ( buf[0] != ':' || buf[1] != ':' || buf[2] != '-' ||
- buf[3] != ':' || buf[4] != ':' || slow >= 75 ||
- elow >= 75 || smid >=60 || emid >=60 ||
- tstart < 0 || tend <= 0 || tstart >= tend )
- {
- printf("読み込み時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- case 6:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tstart = tstart - ( 2 * 75 );
- tend = -1;
- if ( buf[0] != ':' || buf[1] != ':' || buf[2] != '-' ||
- slow >= 75 || smid >=60 || tstart < 0 )
- {
- printf("読み込み時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- default:
- printf("読み込み時間の設定が異常です。\n" );
- exit(1);
- break;
- }
- }
- } else {
- mode = cd_取り込み;
- switch( sscanf( &arg[2],"%d",&music_no ) ){
- case 1:
- break;
- default:
- printf("曲番号の指定が異常です。\n" );
- exit(1);
- break;
- }
- }
- break;
- case 'o':
- outfile = &arg[2];
- of = -1;
- break;
- case 'p':
- if ( stricmp( "n" , &arg[2] ) == 0 ){
- disp_fg = 1;
- break;
- }
- if ( stricmp( "cms" ,&arg[2] ) == 0 ){
- pcm_mode = 0;
- adpcm_flg = 0;
- if ( of==0 ) outfile = outfile_s44;
- break;
- }
- if ( stricmp( "cma" ,&arg[2] ) == 0 ){
- pcm_mode = CONVERT_PCMA;
- adpcm_flg = 0;
- if ( of==0 ) outfile = outfile_a44;
- break;
- }
- if ( stricmp( "cmr" ,&arg[2] ) == 0 ){
- pcm_mode = CONVERT_PCMR;
- adpcm_flg = 0;
- if ( of==0 ) outfile = outfile_m44;
- break;
- }
- if ( stricmp( "cml" ,&arg[2] ) == 0 ){
- pcm_mode = CONVERT_PCML;
- adpcm_flg = 0;
- if ( of==0 ) outfile = outfile_m44;
- break;
- }
- if ( stricmp( "cmm" ,&arg[2] ) == 0 ){
- pcm_mode = CONVERT_PCMM;
- adpcm_flg = 0;
- if ( of==0 ) outfile = outfile_m44;
- break;
- }
- if ( stricmp( "cm15" ,&arg[2] ) == 0 ) {
- pcm_mode = CONVERT_PCM15;
- adpcm_flg = 0;
- break;
- }
- printf("オプションエラーです。\n" );
- exit(1);
- break;
- case 'e':
- if ( stricmp( "rrjmp" ,&arg[2] ) == 0 ){
- errjmp_fg = 1; /* 致命的でないエラーは無視します。*/
- } else if ( stricmp( "rrod" ,&arg[2] ) == 0 ){
- errod_fg= 1;
- } else if ( stricmp( "nv" ,&arg[2] ) == 0 ){
- evn= 1;
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- case 'r':
- strlwr( &arg[1] );
- if ( strncmp( "ate" ,&arg[2],3 ) == 0 ){
- if ( sscanf( &arg[5],"%d", &pcm_rate )!=1 ){
- printf(" rate 値が異常です。\n");
- exit(1);
- }
- if ( pcm_rate >= 1 && pcm_rate<=441 ){
- pcm_rate*=100;
- } else if ( pcm_rate >= 3900 && pcm_rate<=44100 ){
- ;
- } else {
- printf(" rate 値が異常です。\n");
- exit(1);
- }
- break;
- } else if ( strncmp( "etry" ,&arg[2],4 ) == 0 ){
- if ( sscanf( &arg[6],"%d", &retry_fg )!=1 ){
- printf(" retry 値が異常です。\n");
- exit(1);
- }
- if ( retry_fg < 1 || retry_fg > 60000 ){
- printf(" retry 値が異常です。\n");
- exit(1);
- }
- break;
- } else if ( arg[2] == 0 ){
- convert_mode = CONVERT_R;
- adr_offset = 2;
- break;
- } else if ( stricmp( "ight" ,&arg[2] ) == 0 ){
- convert_mode = CONVERT_R;
- adr_offset = 2;
- break;
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- case 'm':
- if ( stricmp( "br7" ,&arg[2] ) == 0 ){
- mbr7f=1;
- break;
- } else if ( stricmp( "erc" ,&arg[2] ) == 0 ){
- merc_fg=1;
- break;
- } else if ( stricmp( "ix" ,&arg[2] ) == 0 ){
- convert_mode = CONVERT_M;
- break;
- } else if ( stricmp( "an" ,&arg[2] ) == 0 ){
- stm_fg=1; /* SCSITAI & マニュアル転送フラグ*/
- break;
- } else if ( stricmp( "pu" ,&arg[2] ) == 0 ){
- dma_fg = 0; /* DMAC使用フラグ*/
- break;
- }
- if ( (arg[2]|0x20) == 'a' ){
- buf_size = -1; /* 最大 */
- break;
- }
- /* -mN Nは、数字で N秒分のワーク */
- switch( sscanf( &arg[2],"%d", &buf_size ) ){
- case 1:
- if ( buf_size == 0 ){
- printf("-m[n] の値が異常です。\n" );
- exit(1);
- break;
- }
- break;
- default:
- printf("-m[n] の値が異常です。\n" );
- exit(1);
- break;
- }
- break;
- case 'a':
- switch(arg[2]|0x20){
- case 'r':
- convert_mode = CONVERT_AVE_R;
- //adr_offset = 2;
- break;
- case 'l':
- convert_mode = CONVERT_AVE_L;
- //adr_offset = 0;
- break;
- case 'm':
- convert_mode = CONVERT_AVE_M;
- break;
- case 'd':
- if ( stricmp("pcm", &arg[3]) == 0 ){
- pcm_mode = CONVERT_PCM15;
- adpcm_flg = 1;
- if ( of==0 ) outfile = outfile_adpcm;
- break;
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- case '8':
- if ( stricmp("8", &arg[3]) == 0 ){
- pcm_mode = CONVERT_A88;
- adpcm_flg = 1;
- if ( of==0 ) outfile = outfile_a88;
- break;
- }
- default:
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- case 'n':
- cd_speed = 0;
- break;
- case 'f':
- cd_speed = 1;
- break;
- case 'u':
- cd_speed = 2;
- break;
- case 'v':
- if ( sscanf( &arg[2],"%d", &waru )!=1 ){
- printf(" 音量調節(-v)の値が異常です。\n");
- exit(1);
- break;
- }
- if ( waru == 0 || waru > 256 ){
- printf(" 音量調節(-v)の値が異常です。\n");
- exit(1);
- }
- break;
- case 'w':
- if ( stricmp( "ave" ,&arg[2] ) == 0 ){
- pcm_mode = CONVERT_WAVE;
- adpcm_flg = 2;
- if ( of==0 ) outfile = outfile_wave;
- } else {
- printf("オプションエラーです。\n" );
- exit(1);
- }
- break;
- default:
- printf("オプションエラーです。\n" );
- //if ( sscanf( &arg[1],"%d", &waru )!=1 ){
- // printf("音量調節の入力がへん\n");
- // exit(1);
- // break;
- //}
- //if ( waru == 0 || waru > 256 ){
- // printf("音量調節の入力がへん\n");
- // exit(1);
- //}
- break;
- }
- } else {
- if ( stricmp( "all", &arg[0] ) == 0 ){
- mode = cd_演奏開始_ALL; /* ALL 演奏 */
- } else {
- mode = cd_演奏開始2;
- /* 演奏時間オフセットチェック */
- switch( sscanf( &arg[0],"%d/%d:%d:%d%1s%d:%d:%d",
- &music_no,
- &shigh,&smid,&slow,&buf[2],
- &ehigh,&emid,&elow ) )
- {
- case 8:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tend = ( ehigh * 60 * 75 ) + ( emid * 75 ) + elow ;
- if ( buf[2] != '-' || slow >= 75 ||
- elow >= 75 || smid >=60 || emid >=60 ||
- tstart < 0 || tend <= 0 || tstart >= tend ||
- music_no <= 0 )
- {
- printf("演奏時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- case 5:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tend = -1;
- if ( buf[2] != '-' ||
- slow >= 75 || smid >=60 || tstart < 0 || start <= 0 )
- {
- printf("演奏時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- default:
- music_no = 0;
- switch( sscanf( &arg[0],"%d:%d:%d%1s%d:%d:%d",
- &shigh,&smid,&slow,&buf[2],
- &ehigh,&emid,&elow ) )
- {
- case 7:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tend = ( ehigh * 60 * 75 ) + ( emid * 75 ) + elow ;
- if ( buf[2] != '-' ||
- slow >= 75 ||
- elow >= 75 || smid >=60 || emid >=60 ||
- tstart < 0 || tend <= 0 || tstart >= tend )
- {
- printf("演奏時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- case 4:
- tstart = ( shigh * 60 * 75 ) + ( smid * 75 ) + slow ;
- tend = -1;
- if ( buf[2] != '-' ||
- slow >= 75 || smid >=60 || tstart < 0 )
- {
- printf("演奏時間の設定が異常です。\n" );
- exit(1);
- }
- break;
- default:
- mode = cd_演奏開始;
- if ( sscanf( &arg[0],"%d%1s%d", &start,buf,&end )==3 ){
- if ( start >= end || buf[0] != '-' ){
- printf("曲番号の指定が異常です。\n");
- exit(1);
- }
- } else if ( sscanf( &arg[0],"%d%1s", &start,buf )==2 ){
- if ( buf[0] != '-' ){
- printf("曲番号の指定が異常です。\n");
- exit(1);
- }
- end = -1; /* 最後まで */
- } else if ( sscanf( &arg[0],"%d", &start )==1 ){
- end=start;
- } else {
- printf("曲番号の指定が異常です。\n");
- exit(1);
- }
- }
- }
- }
- }
- }
- /* オプション解析処理 終了 */
- if ( test_fg!=0 || merc_fg!=0 ){
- /*テストフラグ*/
- pcm_mode = 0;
- adpcm_flg = 0;
- pcm_rate = -1; /* -rate 0;15625 変換レート*/
- check_fg = 0;
-
- test_fg = -1;
- }
-
- if ( pcm_mode==0 || pcm_mode==CONVERT_PCMA || pcm_mode==CONVERT_WAVE ){
- if ( pcm_rate<0 ){
- pcm_rate = 44100;
- } else if ( pcm_rate == 22050 ){
- if ( of==0 ){
- if ( pcm_mode==0 )
- outfile = outfile_s22;
- else if ( pcm_mode==CONVERT_PCMA )
- outfile = outfile_a22;
- else outfile = outfile_wave;
- }
- } else {
- printf(" rate の指定が異常です。\n");
- exit(1);
- }
- } else {
- if ( pcm_rate<0 )
- pcm_rate = 15625; /* -rate 0;15625 変換レート*/
- }
-
- if ( outfile == NULL ){
- if ( adpcm_flg == 0 )
- outfile = outfile_pcm; /* デフォルトファイル名セット */
- else if ( adpcm_flg == 1 )
- outfile = outfile_adpcm; /* デフォルトファイル名セット */
- else outfile = outfile_wave; /* デフォルトファイル名セット */
- }
-
- CDC_ID =CDCID();
- if ( CDC_ID >=0 )
- CDC_ID &= 0x00FFFFFF;
-
- if ( SCSI_ID == -1 )
- SCSI_ID = CDC_ID;
- if ( SCSI_ID == -1 ){
- SCSI_ID = DEF_SCSI_ID; /* デフォルトを仮設定 */
- ptr = (char *)getenv( "MUSIC-CDROM" );
- if ( ptr == NULL )
- ptr = (char *)getenv( "CDROM" ) ;
- if ( ptr != NULL ){
- SCSI_ID = ptr[0] - '0';
- if ( SCSI_ID<0 || SCSI_ID>9 ) {
- i=(ptr[0]|0x20) - 'a';
- if ( i>=0 && i<=5 ){
- SCSI_ID = 10 + i;
- } else {
- printf("環境変数 `CDROM' が正しく設定されていません。\n");
- exit(1);
- }
- } else {
- i=ptr[1] - '0';
- if ( i>=0 && i<=9 )
- SCSI_ID = SCSI_ID*10 + i;
- if ( SCSI_ID<0 || SCSI_ID>15 ) {
- printf("環境変数 `CDROM' が正しく設定されていません。\n");
- exit(1);
- }
- }
- }
- }
- if ( S_TW_CHK()!=-2 )
- i=S_LEVEL_();
- else i=S_TW_LEVEL(SCSI_ID);
- if ( dma_fg==0 ){
- // MPU 転送
- if ( (i&0xFF00)==0x5400 && (i&0xFF)>=1 ){
- if ( stm_fg == 0 )
- sct_fg = 1; /* SCSITAI 使用フラグ*/
- }
- } else {
- // DMA 転送
- sct_fg = 0; /* SCSITAI 使用フラグ*/
- stm_fg = 0; /* SCSITAI & マニュアル転送フラグ*/
- if ( (i&0xFF00)==0x6400 )
- mach2_fg = 1; /* Mach2 フラグ*/
- }
- sprintf(pcm_rate_str,"%.3f",(double)pcm_rate/1000.);
-
- breakmd=BREAKCK(-1); /* 起動時のbreak状態 */
-
- INTVCS(0xFFF1,(void*)AbortDisp);
-
- /* 装置動作可能かチェックする */
- for( i=0;i<5;i++ ){
- /*-- メディアチェック --*/
- /*まず inq.データの大きさを調べる*/
- if ( S_INQUIRY( 5, SCSI_ID, (void*)buf2 ) != 0 ){
- printf("指定された SCSI-ID=%d ",SCSI_ID&0xFF );
- if ( SCSI_ID&0xFFFF0000 )
- printf("LUN=%d ",SCSI_ID/0x10000 );
- printf("の INQUIRY に失敗しました。\n");
- EndtDisp(1);
- }
- /*inq.データの大きさ分読み込む*/
- if ( S_INQUIRY( buf2[4]+5, SCSI_ID, (void*)buf ) != 0 ){
- printf("指定された SCSI-ID=%d ",SCSI_ID&0xFF );
- if ( SCSI_ID&0xFFFF0000 )
- printf("LUN=%d ",SCSI_ID/0x10000 );
- printf("の INQUIRY に失敗しました。\n");
- EndtDisp(1);
- }
- if ( buf[0]!=0x05 && buf[0]!=0x04 ){
- printf("指定された SCSI-ID=%d ",SCSI_ID&0xFF );
- if ( SCSI_ID&0xFFFF0000 )
- printf("LUN=%d ",SCSI_ID/0x10000 );
- printf("の装置は、CD-ROM ではないようです。\n");
- EndtDisp(1);
- }
- if ( CDROM_DRIVE<0 ){
- if ( memcmp( "SONY CD-ROM CDU-561", &buf[8],22 ) == 0 ){
- CDROM_DRIVE = CD_CDU561;
- } else if ( memcmp( "SONY CD-ROM CDU-55S", &buf[8],22)==0){
- CDROM_DRIVE = CD_CDU561;
-
- } else if ( memcmp( "NRC MBR-7", &buf[8],13)==0){
- CDROM_DRIVE = CD_CDU561;
- } else if ( memcmp( "MATSHITAPD-1 LF", &buf[8],15)==0){
- CDROM_DRIVE = CD_CDU561;
-
- } else if ( memcmp( "TOSHIBA CD-ROM XM-3401TA", &buf[8],24)==0){
- CDROM_DRIVE = TOSHIBATYPE;
- } else if ( memcmp( "TOSHIBA CD-ROM XM-4101TA", &buf[8],24)==0){
- CDROM_DRIVE = TOSHIBATYPE;
- } else {
- CDROM_DRIVE = -1;
- }
- }
- /* 装置動作可能かチェック */
- j=S_TESTUNIT(SCSI_ID);
- if ( j!=0 && j!=1 )
- continue;
- /* 演奏するでえ */
- switch( mode ){
- case cd_演奏開始:
- cd_play(start,end);
- CDCRESET();
- EndtDisp0(0);
- case cd_演奏開始2:
- cd_play2(music_no,tstart,tend);
- CDCRESET();
- EndtDisp0(0);
- case cd_演奏開始_ALL:
- cd_play_all();
- CDCRESET();
- EndtDisp0(0);
- case cd_演奏中断:
- cd_play_pause();
- CDCRESET();
- EndtDisp0(0);
- case cd_演奏再開:
- cd_play_resume();
- CDCRESET();
- EndtDisp0(0);
- case cd_演奏情報:
- cd_play_inf();
- EndtDisp0(0);
- case cd_演奏リスト:
- cd_play_list();
- EndtDisp0(0);
- case cd_取り込み:
- if ( RedTOC( &dmy, &min, &max )!= 0 ){
- printf(" Read TOC でエラーが発生しました。\n");
- EndtDisp(1);
- }
- if ( music_no < min || music_no > max ){
- printf("番号の設定が異常です。\n");
- printf("曲番号は %d ~ %d まで有効です。\n",min, max );
- EndtDisp(1);
- }
- if ( CDROM_DRIVE == -1 ){
- CDROM_DRIVE = SONYTYPE;
- //printf("現在 %s は、",&buf[8]);
- //printf("サポート出来ないか、していません。\n");
- //EndtDisp(1);
- }
- cdda2pcm( music_no, 0,0 ); /* 取り込む */
- EndtDisp(0);
- case cd_取り込み2:
- if ( CDROM_DRIVE == -1 ){
- CDROM_DRIVE = SONYTYPE;
- //printf("現在 %s は、",&buf[8]);
- //printf("サポート出来ないか、していません。\n");
- //EndtDisp(1);
- }
- if ( music_no != 0 ){
- if ( RedTOC( &dmy, &min, &max ) != 0 ){
- printf(" Read TOC でエラーが発生しました。\n");
- EndtDisp(1);
- }
- if ( music_no < min || music_no > max ){
- printf("番号の設定が異常です。\n" );
- printf("曲番号は %d ~ %d まで有効です。\n", min, max );
- EndtDisp(1);
- } else {
- if ( Music_inf( music_no, &adr ) == 0 ){
- tstart = tstart + time2bin(adr);
- if ( tend != -1 )
- tend = tend + time2bin(adr);
- } else {
- printf( "Start Track Address or ReadTOC Command error "
- "のため演奏時間は分かりませんでした。\n"
- );
- EndtDisp(1);
- }
- }
- }
- cdda2pcm( -1, tstart, tend ); /* 取り込む */
- EndtDisp(0);
- }
- EndtDisp(0);
- }
- j=S_TESTUNIT(SCSI_ID);
- printf("指定された SCSI-ID=%d ",SCSI_ID&0xFF);
- if ( SCSI_ID&0xFFFF0000 )
- printf("LUN=%d ",SCSI_ID/0x10000 );
- if ( j<0 )
- printf("の装置は、現在動作不可能です。\n");
- else printf("の装置にメディアが未挿入です。\n");
- EndtDisp(1);
- }
- /****************************************/
- /* Print */
- /****************************************/
- void printf_(d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12)
- int d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12;
- {
- if ( disp_fg==0 )
- printf((void*)d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12);
- }
- /****************************************/
- /* ABORT 終了 */
- /****************************************/
- void AbortDisp()
- {
- C_CURON(); /* カーソルON */
- S_RESET();
- S_REZEROUNIT(SCSI_ID);
- BREAKCK(breakmd);
- printf("\x1B""0");
- printf("\n"CFC"CD2PCMt.x : アボートしました。\n");
- KFLUSHIO(0xFF);
- exit(1);
- }
- /*+++++++*/
- void EndtDisp0(int ec)
- {
- C_CURON(); /* カーソルON */
- if ( MT_bak[0]!=0xFF )
- S_MODESELECT( PF, 12, SCSI_ID, MT_bak );
- KFLUSHIO(0xFF);
- printf("\x1B""0");
- exit(ec);
- }
- /*+++++++*/
- void EndtDisp(int ec)
- {
- C_CURON(); /* カーソルON */
- S_REZEROUNIT(SCSI_ID);
- if ( MT_bak[0]!=0xFF )
- S_MODESELECT( PF, 12, SCSI_ID, MT_bak );
- KFLUSHIO(0xFF);
- printf("\x1B""0");
- exit(ec);
- }
- /*************************************************************************
- スイッチ処理
- *************************************************************************/
- char *SwitchDisp(n,argc,argv)
- int n;
- int argc;
- char *argv[];
- {
- static char ss[256];
- int i,j;
- if ( n<argc )
- return(argv[n]);
- n-=argc;
- if ( GETENV("CD2PCM",0,ss)<0 ) /*本当は起動時1回だけ実行すれば良いが手抜き*/
- return(0);
- for(i=j=0;ss[i]==0x20;i++);
- if ( n!=0 ){
- for(;;i++){
- if ( ss[i]==' ' ){
- while( ss[++i]==' ' );
- if ( ++j==n )
- break;
- }
- if ( ss[i]==0 )
- return(0);
- }
- }
- for(j=i;ss[j]!=0&&ss[j]!=' ';j++);
- ss[j]=0;
- return( &ss[i] );
- }
- /****************************************/
- /* ヘルプ表示 */
- /****************************************/
- void cd2pcm_help( void )
- {
- printf( "\n"
- "使用法:CD2PCMt.x [options] [曲番号] [演奏開始時間-終了時間] [ALL]\n"
- " 曲番号 : 演奏するCDの曲番号を指定します。\n"
- " u:v:w- : u分v秒w~最後まで演奏します。\n"
- " u:v:w-x:y:z : u分v秒w~x分y秒zまで演奏します。\n"
- " ?/u:v:x : ? 曲目のu分v秒w~最後まで演奏します。\n"
- " ?/u:v:w-x:y:z : ? 曲目のu分v秒w~x分y秒zまで演奏します。\n"
- " ALL : 全曲演奏します。\n"
- "{options}\n"
- " -s : 演奏中断します。\n"
- " -c : 演奏再開します。\n"
- " -l : 演奏時間を表示します。\n"
- // " -i[x] : SCSI-IDを設定します。\n"
- " -id[x] : SCSI-IDを設定します。\n"
- "\n"
- " -g[x] : [x] 曲目のオーディオデータを読み込みます。\n"
- " -gt[u]:[v]:[w]- : [u]分[v]秒[w]~最後までのAUDIO-DATAを読み込みます。\n"
- " -gt[u]:[v]:[w]-[x]:[y]:[z]\n"
- " : [u]分[v]秒[w]~[x]分[y]秒[z]までのAUDIO-DATAを読み込みます。\n"
- " -gt[?]/[u]:[v]:[w]-\n"
- " : [?] 曲目の[u]分[v]秒[w]~最後までのAUDIO-DATAを読み込みます。\n"
- " -gt[?]/[u]:[v]:[w]-[x]:[y]:[z]\n"
- " : [?] 曲目の[u]分[v]秒[w]~[x]分[y]秒[z]までのAUDIO-DATAを読み込みます。\n"
- "\n"
- " 以下のオプションは、-g 又は -gt が指定された時のみ有効です。\n"
- " -test : 読み込みテストのみします。ファイルを作りません。\n"
- " -pn : 実行中の表示を行いません。\n"
- " -o[filename] : 出力ファイル名の指定。-o の後に空白を空けずに指定します。\n"
- " 指定しなければ、test.* となります(拡張子は記録モードによる)。\n"
- " -ma : メモリに読み込める限り読み込んで処理を行います(def.)。\n"
- " -m[n] : [n]秒分読み込んで処理を行います。\n"
- " -check : 数回データを読み込み、比較してより正しいデータを得ます。\n"
- " -checks : 数回データを読み込み、比較して非常に正しいデータを得ます。\n"
- /// " -chkp[n] : 比較の時n%同じなら一致したとします。\n"
- " -secone : 1セクタ毎読み込む様にします。\n"
- " -retry[n] : 読み込みエラーが出た場合、[n]回挑戦します。\n"
- " -errjmp : 致命的でないエラーは無視します。\n"
- " -errod : -errjmp で無視したエラーセクタのデータは前データのものを使用します。\n"
- // " -mbr7 : エラーの際、ZEROUNIT & SEEK を実行します。\n"
- "\n"
- /// " -dma : 読み込みに DMA を使用します。\n"
- " -mpu : 読み込みに MPU を使用します。\n"
- "\n"
- // " -sony : SONY系のRead CD-DA命令を使用します(def.=デバイスのInquiryで判断)。\n"
- " -toshiba : TOSHIBA系のRead CD-DA命令を使用します(def.= SONY系のRead CD-DA を使用)。\n"
- "\n"
- " -normal : 標準速で読み込みます。\t\tCDU-561&55S の時のみ有効です。\n"
- " -fast : 倍速で読み込みます。\t\tCDU-561&55S の時のみ有効です。\n"
- " -ultra : 最大速で読み込みます。\t\tCDU-561&55S の時のみ有効です。\n"
- " -cdspeed[n] : 読み込み速度を指定します。\t\tMMC 対応ドライブのみ有効です。\n"
- "\n"
- " -pcms : 44.1kHz 16bit ステレオの PCM(ベタ)で記録します[*.S44]。\n"
- " -pcma : 44.1kHz 16bit ステレオの ADPCM で記録します[*.A44]。\n"
- " -pcmr : 44.1kHz 16bit 右のみを PCM(ベタ)で記録します[*.M44]。\n"
- " -pcml : 44.1kHz 16bit 左のみを PCM(ベタ)で記録します[*.M44]。\n"
- " -pcmm : 44.1kHz 16bit 左右ミキシング PCM(ベタ)で記録します[*.M44]。\n"
- " -wave : 44.1kHz 16bit ステレオの WAVE 型式で記録します[*.WAV]。\n"
- /// " -a88 : 88.2kHz 16bit ステレオの ADPCM で記録します[*.A88]。\n"
- " -pcm15 : 15.6kHz 16BIT PCM に変換し記録します[*.P16]。\n"
- " -adpcm : 15.6kHz ADPCM に変換し記録します[*.PCM](def.)。\n"
- "\n"
- " 以下のオプションは、-pcms or -pcma or -wave が指定された時のみ有効です。\n"
- " -hrate : ハーフレート(22.05kHz)にします。\n"
- "\n"
- " 以下のオプションは、-pcm15 or -adpcm が指定された時のみ有効です。\n"
- // " -数値 : 音量を調節します。小さいほど音は大きくなります(def.16)\n"
- " -v[数値] : 音量を調節します。小さいほど音は大きくなります(def.16)\n"
- " -rate[数値] : 変換レートを指定します(def.=15625{15.625kHz})。\n"
- " -mix : 左右をミキシングして記録します(def.)。\n"
- " -right : 右のみを記録します。\n"
- " -left : 左のみ記録します。\n"
- " -am : 左右をミキシング、補間処理して記録します。\n"
- " -ar : 右のみを補間処理して記録します。\n"
- " -al : 左のみを補間処理して記録します。\n"
- "\n"
- " -env : 環境変数 CD2PCM を参照しません。\n"
- "\n"
- " 環境変数 CD2PCM の内容がコマンドラインの最後に追加されます\n"
- );
-
- }
-
- asm("
- .XDEF _STACK_SIZE
- _STACK_SIZE EQU 32*1024
- .XDEF _HEAP_SIZE
- _HEAP_SIZE EQU 8*1024
- ");
-
-